package com.antg;

/**
 * @Description:
 * @Author 子兔Antg
 * @Date 2021/11/21
 **/
public class Code_8 {
    public static void main(String[] args) {
        String a = "00000-42a1234";
        System.out.println(myAtoi(a));
    }

    public static int myAtoi(String s) {
        //检测空串
        if(s==null||s.length()==0) return 0;

        //去掉前导空格
        s = s.trim();

        //防止去掉前导空格后成为空串
        if(s==null||s.length()==0) return 0;

        //排除掉字母开头的
        if((s.charAt(0)!='+'&&s.charAt(0)!='-')&&(s.charAt(0)<48||s.charAt(0)>57)){
            return 0;
        }
        //排除掉仅有+-号的情况
        if(s.length()==1){
            if(s.charAt(0)=='+'||s.charAt(0)=='-') return 0;
        }


        //遍历字符串
        StringBuilder res = new StringBuilder();//容器
        boolean zeroAble = false;//接受0的能力
        boolean flag = true;//接受正负号的能力
        for(int i = 0;i<s.length();i++){
            char c = s.charAt(i);
            //符号
            if(c=='+'||c=='-'){
                if(res.length()==0&&flag){
                    res.append(c);
                    continue;
                }
            }

            if(zeroAble){
                if(c>=48&&c<=57){
                    res.append(c);
                }else{
                    break;
                }
            }else{
                if(c==48){
                    flag = false;
                    continue;
                }
                if(c>48&&c<=57){
                    res.append(c);
                    //有了数字之后就可以存储0
                    zeroAble = true;
                }else {
                    break;
                }
            }
        }

        int result = 0;
        try {
            if(res.length()==0)return 0;
            if(res.length()==1&&(res.charAt(0)=='+'||res.charAt(0)=='-')){
                return 0;
            }
            result = Integer.parseInt(res.toString());
        } catch (NumberFormatException e) {
            if(res.toString().startsWith("-")){
                return Integer.MIN_VALUE;
            }else{
                return Integer.MAX_VALUE;
            }
        }
        return result;
    }
}
